জাভায় জেনেরিক্স ব্যবহার করার সময় Wildcards এবং Bounded Types দুটি গুরুত্বপূর্ণ ধারণা। এগুলো Collections Framework-এর সাথে ব্যবহার করে টাইপ-সেইফ, ফ্লেক্সিবল এবং পুনঃব্যবহারযোগ্য কোড তৈরি করা যায়।
Wildcards:
Wildcards (?) ব্যবহার করে এমন জেনেরিক টাইপগুলো তৈরি করা যায় যেগুলো অজানা বা পরিবর্তনশীল হতে পারে।
Wildcards এর ধরণ:
Unbounded Wildcard (
?): এটি ব্যবহার করা হয় যখন কোনো নির্দিষ্ট টাইপের প্রতি সীমাবদ্ধতা নেই।public void printList(List<?> list) { for (Object obj : list) { System.out.println(obj); } }উদাহরণ:
List<String> stringList = Arrays.asList("Java", "Generics", "Wildcard"); List<Integer> intList = Arrays.asList(10, 20, 30); printList(stringList); // Output: Java, Generics, Wildcard printList(intList); // Output: 10, 20, 30Upper Bounded Wildcard (
<? extends Type>): এটি ব্যবহার করা হয় যখন একটি টাইপ নির্দিষ্ট ক্লাস বা তার সাবক্লাস হতে পারে।public void printNumbers(List<? extends Number> list) { for (Number num : list) { System.out.println(num); } }উদাহরণ:
List<Integer> integers = Arrays.asList(1, 2, 3); List<Double> doubles = Arrays.asList(1.1, 2.2, 3.3); printNumbers(integers); // Output: 1, 2, 3 printNumbers(doubles); // Output: 1.1, 2.2, 3.3Lower Bounded Wildcard (
<? super Type>): এটি ব্যবহার করা হয় যখন একটি টাইপ নির্দিষ্ট ক্লাস বা তার সুপারক্লাস হতে পারে।public void addNumbers(List<? super Integer> list) { list.add(10); list.add(20); }উদাহরণ:
List<Number> numbers = new ArrayList<>(); addNumbers(numbers); System.out.println(numbers); // Output: [10, 20]
Bounded Types:
Bounded Types ব্যবহার করা হয় যখন একটি জেনেরিক টাইপকে নির্দিষ্ট টাইপের মধ্যে সীমাবদ্ধ করতে হয়।
Upper Bound (<T extends Type>)
public <T extends Number> double calculateSum(List<T> list) {
double sum = 0.0;
for (T num : list) {
sum += num.doubleValue();
}
return sum;
}
উদাহরণ:
List<Integer> integers = Arrays.asList(1, 2, 3, 4);
List<Double> doubles = Arrays.asList(1.1, 2.2, 3.3);
System.out.println(calculateSum(integers)); // Output: 10.0
System.out.println(calculateSum(doubles)); // Output: 6.6
Multiple Bounds (<T extends Class & Interface>):
public <T extends Number & Comparable<T>> T findMax(T a, T b) {
return a.compareTo(b) > 0 ? a : b;
}
উদাহরণ:
System.out.println(findMax(10, 20)); // Output: 20
System.out.println(findMax(3.14, 2.71)); // Output: 3.14
Wildcards vs Bounded Types:
| Aspect | Wildcards (?) | Bounded Types (<T extends Type>) |
|---|---|---|
| Usage | Flexible and used in method arguments | Used in method signatures and class definitions |
| Type Information | Works with unknown types | Works with specific bounded types |
| Common Use Cases | Reading data from collections | Performing operations on specific types |
উদাহরণ: Collections-এ Wildcards এবং Bounded Types
import java.util.*;
public class WildcardAndBoundedTypesExample {
// Upper Bounded Wildcard Example
public static void displayNumbers(List<? extends Number> list) {
for (Number num : list) {
System.out.println(num);
}
}
// Lower Bounded Wildcard Example
public static void addElements(List<? super Integer> list) {
list.add(1);
list.add(2);
list.add(3);
}
public static void main(String[] args) {
List<Integer> integers = new ArrayList<>(Arrays.asList(10, 20, 30));
List<Number> numbers = new ArrayList<>();
displayNumbers(integers); // Output: 10, 20, 30
addElements(numbers);
System.out.println(numbers); // Output: [1, 2, 3]
}
}
Wildcards এবং Bounded Types জেনেরিক্সে ফ্লেক্সিবিলিটি এবং টাইপ সেফটি প্রদান করে। Collections Framework-এ তাদের ব্যবহারে কোড আরো রিডেবল, পুনঃব্যবহারযোগ্য এবং কার্যকরী হয়।
Read more